
package com.example.xunai.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Data
@Component
@ConfigurationProperties(prefix = "ai")
public class AiModelConfig {

    /**
     * 默认模型类型
     */
    private String defaultModel = "deepseek";

    /**
     * 模型配置映射
     */
    private Map<String, ModelConfig> models = new HashMap<>();

    @Data
    public static class ModelConfig {

        /**
         * API密钥
         */
        private String apiKey;

        /**
         * API端点URL
         */
        private String apiUrl;

        /**
         * 模型名称
         */
        private String modelName;

        /**
         * 温度参数 (0.0 - 1.0)
         */
        private Double temperature = 0.7;

        /**
         * 最大token数
         */
        private Integer maxTokens = 2048;

        /**
         * 是否启用流式响应
         */
        private Boolean streaming = true;

        /**
         * 验证配置是否完整
         */
        public boolean isValid() {
            return apiKey != null && !apiKey.trim().isEmpty() &&
                    apiUrl != null && !apiUrl.trim().isEmpty() &&
                    modelName != null && !modelName.trim().isEmpty();
        }

        /**
         * 获取完整的配置信息（隐藏敏感信息）
         */
        public String getConfigInfo() {
            return String.format(
                    "ModelConfig{apiUrl='%s', modelName='%s', temperature=%s, maxTokens=%d, streaming=%s}",
                    apiUrl, modelName, temperature, maxTokens, streaming
            );
        }
    }

    /**
     * 获取指定模型的配置
     */
    public ModelConfig getModelConfig(String modelType) {
        return models.get(modelType);
    }

    /**
     * 获取默认模型的配置
     */
    public ModelConfig getDefaultModelConfig() {
        return getModelConfig(defaultModel);
    }

    /**
     * 检查模型是否已配置
     */
    public boolean isModelConfigured(String modelType) {
        ModelConfig config = getModelConfig(modelType);
        return config != null && config.isValid();
    }

    /**
     * 获取所有已配置的模型类型
     */
    public String[] getConfiguredModelTypes() {
        return models.keySet().toArray(new String[0]);
    }

    /**
     * 获取配置信息摘要
     */
    public String getConfigSummary() {
        StringBuilder summary = new StringBuilder();
        summary.append("AI Model Configuration:\n");
        summary.append("Default Model: ").append(defaultModel).append("\n");
        summary.append("Configured Models: ").append(String.join(", ", getConfiguredModelTypes())).append("\n");

        models.forEach((key, config) -> {
            summary.append("  ").append(key).append(": ").append(config.getConfigInfo()).append("\n");
        });

        return summary.toString();
    }
}